package com.at.c08_heap.escape;

/**
 * 标量替换测试
 * -Xmx100m -Xms100m -XX:+DoEscapeAnalysis -XX:+PrintGC -XX:-EliminateAllocations
 *
 * @author huangchao E-mail:fengquan8866@163.com
 * @version 创建时间：2024/7/8 17:02
 */
public class ScalarReplace {
    static class User {
        public int id;
        public String name;
    }

    public static void alloc() {
        User u = new User(); // 未发生逃逸
        u.id = 5;
        u.name = "www.hc.com";
    }

    /**
     * 这段代码运行1亿次alloc。调用进行对象创建，由于User对象实例需要占据 约16字节的空间，因此累计分配空间达到将近1.5GB。如果堆空间小于这个值，就必然发生GC。
     * @param args
     */
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        for (int i = 0; i < 100000000; i++) {
            alloc();
        }
        long end = System.currentTimeMillis();
        System.out.println("花费时间为：" + (end - start) + " ms");
    }
}
